package chemtools_logica.BDL.SFBean;

import chemtools_logica.BDL.IL.BDL_SFRolLocal;
import chemtools_logica.BDL.IR.BDL_SFRolRemote;

import chemtools_logica.Entidades.Rol;

import java.util.List;

import javax.annotation.Resource;

import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name = "BDL_SFRol", mappedName = "map-BDL_SFRol")
public class BDL_SFRolBean implements BDL_SFRolRemote, BDL_SFRolLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    public BDL_SFRolBean() {
    }

    public Rol persistRol(Rol rol) {
        em.persist(rol);
        em.flush();
        return rol;
    }

    public Rol mergeRol(Rol rol) {
        return em.merge(rol);
    }

    public void removeRol(Rol rol) {
        rol = em.find(Rol.class, rol.getIdRol());
        em.remove(rol);
    }

    /** <code>select o from Rol o</code> */
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Rol> getRolFindAll() {
        return em.createNamedQuery("Rol.findAll", Rol.class).getResultList();
    }

    public List<Rol> buscarRol(Rol r) {
        String ejb = "select u from Rol u where 1=1 ";
        if (r.getNombre() != null && !r.getNombre().equals("")) {
            ejb += "and u.nombre like '%" + r.getNombre() + "%' ";
        }
        if (r.getEstado() != -1) {
            ejb += "and u.estado=" + r.getEstado() + "";
        }
        return em.createQuery(ejb, Rol.class).getResultList();
    }

    public List<Rol> buscarRolExacto(Rol r) {
        String ejb = "select u from Rol u where 1=1 ";
        if (r.getNombre() != null && !r.getNombre().equals("")) {
            ejb += "and u.nombre = '" + r.getNombre() + "' ";
        }
        if (r.getEstado() != -1) {
            ejb += "and u.estado=" + r.getEstado() + "";
        }
        return em.createQuery(ejb, Rol.class).getResultList();
    }

    public List<Rol> existeNombreRol(Rol r) {
        String ejb = "select u from Rol u where 1=1 ";
        if (r.getIdRol() != 0) {
            ejb += "and u.idRol != " + r.getIdRol() + " ";
        }
        if (r.getNombre() != null && !r.getNombre().equals("")) {
            ejb += "and u.nombre = '" + r.getNombre() + "' ";
        }
        if (r.getEstado() != -1) {
            ejb += "and u.estado=" + r.getEstado() + "";
        }
        return em.createQuery(ejb, Rol.class).getResultList();
    }
}
